<!DOCTYPE HTML>
<html>
<head>
<title>InStr() | AutoHotkey</title>
<meta name="description" content="The InStr function searches for a given occurrence of a string, from the left or the right." />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
</head>
<body>

<h1>InStr()</h1>

<p>在一个字符串中向右或向左搜索指定内容.</p>

<pre class="Syntax">FoundPos := <span class="func">InStr</span>(Haystack, Needle <span class="optional">, CaseSensitive := false, StartingPos := 1, Occurrence := 1</span>)</pre>
<h2>参数</h2>
<dl>

  <dt>Haystack</dt>
  <dd><p>被搜索的字符串.</p></dd>
  
  <dt>Needle</dt>
  <dd><p>需要搜索的字符串.</p></dd>
  
  <dt>CaseSensitive</dt>
  <dd><p>如果省略 <em>CaseSensitive</em> 参数或指定为 false, 搜索时将不区分大小写(不区分的方式取决于 <a href="StringCaseSense.htm">StringCaseSense</a> ); 否则会严格匹配大小写.</p></dd>

  <dt>StartingPos</dt>
  <dd><p>如果省略 <em>StartingPos</em> 将默认从1(<em>Haystack</em>字符串中的位置 1) 开始搜索. 否则, 指定 2 从第二个字符开始, 3 从第三个字符开始, 依此类推.</p>
      <p>如果 <em>StartingPos</em> 超过了字符串 <em>Haystack</em> 的长度会返回 0. <span class="ver">[AHK_L 57+]:</span> 如果 <em>StartingPos</em> 指定 0 或负数会变成从字符串末尾开始的反向搜索(从右到左).</p>
      <p>不管 <em>StartingPos</em> 如何变, 返回值总是相对于 <em>Haystack</em> 中的第一个字符. 例如, "abc" 在 "123abc789" 中的位置总是 4.</p></dd>

  <dt>Occurrence <span class="ver">[AHK_L 57+]</span></dt>
  <dd><p>如果省略 <em>Occurrence</em> 默认返回 <em>Needle</em> 在 <em>Haystack</em> 中的首次匹配位置. 指定 <em>Occurrence</em> 为 2 返回第二次匹配的位置, 3 返回第三次匹配位置, 依此类推.</p></dd>

  </dl>

<h2>返回值</h2>
<p>该函数返回出现字符串 <em>Needle</em> 在字符串 <em>Haystack</em> 中的位置. 位置 1 表示第一个字符; 因为 0 和 "false" 为同义词, 使它能提供直觉上 "没找到" 的意义.</p>

<h2>备注</h2>
<p>这个函数整合了 <a href="IfInString.htm">IfInString</a> 和 <a href="StringGetPos.htm">StringGetPos</a> 命令, 以及一个简单形式的 <a href="RegExMatch.htm">RegExMatch()</a>.</p>
<p><a href="RegExMatch.htm">RegExMatch()</a> 可用于搜索字符串中的模式(正则表达式), 使其比 InStr() 灵活得多. 然而, 在搜索一个简单的子字符串时, InStr() 通常比 RegExMatch() 快.</p>

<h2>相关</h2>
<p><a href="RegExMatch.htm">RegExMatch()</a>, <a href="StringGetPos.htm">StringGetPos</a>, <a href="IfInString.htm">IfInString</a>, <a href="StringCaseSense.htm">StringCaseSense</a>, <a href="IfIn.htm">if var in/contains MatchList</a>, <a href="IfBetween.htm">if var between</a>, <a href="IfIs.htm">if var is type</a></p>

<h2>示例</h2>
<pre class="NoIndent"><em>; 示例 1</em>
MsgBox % InStr("123abc789","abc") <em>; 返回 4</em>

<em>; 示例 2</em>
Haystack := "The Quick Brown Fox Jumps Over the Lazy Dog"
Needle := "Fox"
If InStr(Haystack, Needle)
  MsgBox, The string was found.
Else
  MsgBox, The string was not found.

<em>; 示例 3</em>
Haystack := "The Quick Brown Fox Jumps Over the Lazy Dog"
Needle := "the"
MsgBox % InStr(Haystack, Needle, false, 1, 2) <em>; 不区分大小写的搜索, 返回第二次匹配的位置</em>
MsgBox % InStr(Haystack, Needle, true) <em>; 区分大小写的搜索, 返回首次匹配的位置, 结果同上</em>
</pre>

</body>
</html>